import { EnumDataType, EnumRegisterType } from "./enum";

/** 连接信息接口 */
export interface ModbusTCPClientInterface {
    /** 主机地址 */
    host: string,
    /** 端口号 */
    port: number,
    /** 设备ID */
    deviceID: number,
    /** 连接超时时间，单位：毫秒 */
    timeout?: number,
    /** length of one package */
    packageLength?: number,
    /** 最大重连时长，单位：小时，0为无限时长 */
    maxReconnectTime?: number,
    /** 尝试重连时间，单位：秒 */
    tryReconnectTime?: number,
}

/** 配置用的寄存器 */
export interface Register {
    /** 寄存器 */
    register: string,
    /** 数据类型 */
    dataType: EnumDataType
}

/** 完整寄存器信息 */
export interface RegisterAll {
    /** 寄存器 */
    register: string,
    /** 寄存器类型 */
    registerType: EnumRegisterType,
    /** 开始地址 */
    startAddr: number,
    /** 结束地址 */
    endAddr: number,
    /** 数据类型 */
    dataType: EnumDataType,
    /** 打包索引号 */
    packageIndex: number,
    /** Buffer 地址 */
    bufferAddr: number[],
    /** 值 */
    value: boolean | number | string | null,
    /** 时间戳 */
    timestamp: Date,
    /** 质量戳，GOOD 为好 */
    quality: string
};

/** 包信息 */
export interface Package {
    /** 线圈寄存器包 */
    Coil: PackageItem[],
    /** 离散输入寄存器包 */
    DisInput: PackageItem[],
    /** 输入寄存器包 */
    Input: PackageItem[],
    /** 保持寄存器包 */
    Holding: PackageItem[],
}

/** 包的 item 信息 */
export interface PackageItem {
    startAddr: number,
    endAddr: number,
    length: number,
    datas: any,
    timestamp: Date,
    quality: string
}

/** 结果接口 */
export interface ResultInterface {
    result: boolean,
    info: any
}